//
//  HMTabBar.swift
//  WeiBoSwift
//
//  Created by hgj on 2016/11/16.
//  Copyright © 2016年 HuGuoJian. All rights reserved.
//

import UIKit

class HMTabBar: UITabBar {

    // MARK: 懒加载创建中间的 按钮
    lazy var composeBtn: UIButton = {
        
        let btn = UIButton()
        
        //设置图片
        btn.setImage(#imageLiteral(resourceName: "tabbar_compose_icon_add"), for: .normal)
        btn.setImage(#imageLiteral(resourceName: "tabbar_compose_icon_add_highlighted"), for: .highlighted)
        
        //设置背景图片
        btn.setBackgroundImage(#imageLiteral(resourceName: "tabbar_compose_button"), for: .normal)
        btn.setBackgroundImage(#imageLiteral(resourceName: "tabbar_compose_button_highlighted"), for: .highlighted)
        
        return btn
    }()
    
    // 闭包
    var composeClosure: (() -> ())?
    
    //手写代码创建视图,不会执行这个方法
    override func awakeFromNib() {
    }
    
    // view视图 重写构造方法
    override init(frame: CGRect) {
        
        super.init(frame: frame)
        
        composeBtn.addTarget(self, action: #selector(clickComposeButton), for: .touchUpInside)
        
        addSubview(composeBtn)
    }
    
    /*  这个方法跟随 init 方法一起出现
        这是一个解档的方法
        重写了构造方法 系统就需要程序员手动实现该方法
    */
    required init?(coder aDecoder: NSCoder) {
        
        //默认实现报错  一旦该视图通过xib加载程序就会崩溃
        fatalError("init(coder:) has not been implemented")
        
        /* 该控件就支持手写代码和 xib来创建 (与上面二选一)
        super.init(coder: aDecoder)
        self.addSubview(composeBtn)
        */
    }
    
    /*
    不希望外界能够访问按钮的点击事件 需要设置为私有的
    一旦添加了private 这个时候私有的方法 就对OC的运行循环不可见
    @objc 是一个OC的标识
    swift 会对继承自NSObject的对象的方法或者属性默认添加 @objc标识,不会对私有的属性或者方法添加@objc标识
    添加@objc 是告诉系统这个方法或者属性具备OC特性(消息机制,KVC的动态派发)
    */
    @objc private func clickComposeButton() {
        
        print("点击➕号按钮","PATH:\(#file)","FUNCTION:\(#function)","ROW:\(#line)")
        
        composeClosure?()
    }
    
    // MARK: 重写layout来布局 修改视图位置会自动调用这个方法
    override func layoutSubviews() {
        
        super.layoutSubviews()
        
        let w = UIScreen.main.bounds.width / 5
        let h = bounds.height
        
        var index = 0
        
        for subview in subviews {
            
            if subview.isKind(of: NSClassFromString("UITabBarButton")!) {
                
                subview.frame = CGRect(x: w * CGFloat(index), y: 0, width: w, height: h)
                
                index += (index == 1 ? 2 : 1)
            }
        }
        // 这里不能用 composeBtn.center = center
        composeBtn.bounds.size = CGSize(width: w, height: h)
        composeBtn.center = CGPoint(x: center.x, y: h * 0.5 - 10)
    }
}
